const express = require('express');
const cors = require('cors');

const router = express.Router();
const axios = require('axios');
require('dotenv').config();

//使用body-parser中间件应该在定义路由之前
const bodyParser = require('body-parser');

// 允许所有域名访问（仅用于开发环境）
router.use(cors());

// 仅允许特定域名访问
// const corsOptions = {
//     origin: 'http://example.com', // 替换为你的前端域名
//     methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
//     credentials: true,
//     optionsSuccessStatus: 204
// };
// app.use(cors(corsOptions));

// 确保 Express 可以解析 JSON 请求体
router.use(express.json());
router.use(express.urlencoded({ extended: true }));

const app = express();
const userService = require('../service/userService');
const userLibrary = require('../db/userLibrary');
const { createUserJwtToken, verifyJwtToken, encodedInput } = require('../util/server_jwt');

//添加其他后端接口

app.use(bodyParser.json());

const db = require('../db/db'); 
const { verify } = require('jsonwebtoken');
const { userLogin } = require('../db/userLibrary');

const WECHAT_APP_ID = process.env.WECHAT_APP_ID;
const WECHAT_APP_SECRET = process.env.WECHAT_APP_SECRET;

//此处添加全局变量
let id, nickname, self_introduction, email, gender, password, phone, address;
const admin_userinfo = { id, nickname, self_introduction, email, gender, password, phone, address};

let session_key; 

//此处添加自定义函数

//发送请求到微信服务器并接受回调
async function axiosRequest(tokenParams) {
  try{
    // console.log('WECHAT_APP_ID:', tokenParams.params.appid);
    // console.log('WECHAT_APP_SECRET:', tokenParams.params.secret);
    let url = `https://api.weixin.qq.com/sns/jscode2session?appid=${WECHAT_APP_ID}&secret=${WECHAT_APP_SECRET}&js_code=${tokenParams.params.js_code}&grant_type=authorization_code`;
    const response = await axios.get(url);
    console.log(url);

    if(response){
    return response;
    }
    else{
    console.log('response为空!');
    throw new Error('发送请求到微信服务器失败!');
}
    }

    catch (error) {
    throw error;
  }
};


// 获取微信用户信息的主函数   接收code
router.post('/wx/login', async function fetchWechatUserInfo(req, res,next) {

    console.log(req.body);

    let code;
    let jwt_data;

    try {
        //从客户端发送到服务器的HTTP POST请求体（body）中的code
        if(req.body && req.body.code){
        code = req.body.code;

        }else{
            return res.status(400).json({ success: 0, error: 'code获取失败！！！' });
        }

  //请求参数
  const tokenParams = {
    params: {
      appid: WECHAT_APP_ID,
      secret: WECHAT_APP_SECRET,
      js_code: code,
      grant_type: 'authorization_code'
    }
  };

  console.log("tokenParams", tokenParams);

  //将appid, app_secret, code 发送到微信服务器
    const userResponse = await axiosRequest(tokenParams);

//userResponse存在
//接着判断errcode是否存在，而用来判断调用的成功与否  存在则失败
if (userResponse.data.errcode)
{
    console.log('userResponse出错！');
    res.status(400).json({ err: userResponse.data.errmsg, code: userResponse.data.errcode });
    throw new Error('发送请求到微信服务器失败!');
}else{
   console.log('微信API调用成功!');
//    console.log('userResponse为:', userResponse);
} 
  
    // 获取openid 和 session_key   session_key待定
    let openid = userResponse.data.openid;
    // console.log('openid:', openid);
    // let session_key = data.session_key;  

    if (!openid) {
      res.status(400).json({err: 'openid is null'});
    }

  // 查询该用户是否已存在
  let result = await userService.checkUserExistByOpenid(openid);
  // 不存在则注册进数据库中
  if (result && !result.result) {
      let userAddResult = await userService.addUser({openid: openid});
    //   console.log(userAddResult);

      if (!userAddResult.success)
        if(userAddResult.err)
          res.status(400).json({err: '用户注册失败'});
      

      // 准备令牌数据
      jwt_data = {uid: userAddResult.insertId, openid: openid};
  } else {
      //用户已存在,输出用户信息
      jwt_data = {uid: result.uid, openid: openid};
  }
  // 生成令牌 - 有效期一个月
  let jwt = await createUserJwtToken(jwt_data, {expiresIn: '720h'});
  // 响应令牌
  res.json({jwt: jwt, success: 1});
    }

  catch (error) {
    // 处理任何在执行过程中可能抛出的错误
    console.error('未知错误:', error);
    res.status(500).json({ error: '错误!' });
}
});


 //检测用户登录
router.post('/checkUserLogin', async(req, res) => {
    try {
        //前端发个jwt过来就行了
        const jwtToken = req.body;
    
        const verificationResult = verifyJwtToken(jwtToken);
    
        if (verificationResult.login) {
          // JWT验证成功
          res.status(200).json({
            status: 'success',
            message: verificationResult.msg,
            data: verificationResult.data
          });
        } else {
          // JWT验证失败或超时
          res.status(401).json({
            status: 'error',
            message: verificationResult.msg,
            error: verificationResult.err
          });
        }
      } catch (error) {
        // 处理未预料到的异常
        console.error("An unexpected error occurred:", error);
        res.status(500).json({ status: 'error', message: 'Internal Server Error' });
      }
    });



//搜索列表
router.get('/hotSales', async function(req, res) {
    //test
    console.log('Received query:', req.query);

    // //暂定前端字段名--jwt
    // const data = req.body.jwt;

    // const result = userService.checkWxUserLogin(data);

    const goodsName = req.query;

    try {
        // 调用业务逻辑
        const result = await userLibrary.hotSales(goodsName);
        
        // 返回结果
        res.json(result);
    } catch (error) {
        // 错误处理
        console.error('Error processing hot sales request:', error);
        res.status(500).json({ success: false, msg: "服务器内部错误" });
    }
});


//形成订单
router.get('/deleteConsultRecordInfo', async function (req, res, next) {});


//历史浏览
router.get('/deleteConsultRecordInfo', async function (req, res, next) {});


//收藏商品
router.get('/deleteConsultRecordInfo', async function (req, res, next) {});

//新增地址
router.post('/AddAddress', async (req, res) => {

    console.log(req.body);

    const token = req.header('Authorization');

    //用户openid jwt
    console.log('用户jwt:', token);

    const Result = await userService.checkWxUserLogin(token);
    console.log('解码后的jwt长什么样？:', Result);

    //登录失败
    if(!Result.login){
        res.json(Result); 
    }

    //解码后的uid
    const openid = Result.data.openid;
    console.log('解码后的openid:', openid);

    const address = req.body.address;
    const name = req.body.name;
    const phone = req.body.phone;

    const data = {openid, address, name, phone};
    console.log(data);

    try {
        const result = await userLibrary.AddAddress(data);
        
        res.json(result);
    } catch (error) {
        console.error('Error processing hot sales request:', error);
        res.status(500).json({ success: false, msg: "服务器内部错误" });
    }
});


//根据jwt返回用户信息
router.get('/getUserInfoByJwt', async (req, res) => {

    const token = req.header('Authorization');

    //用户uid 
    console.log('用户jwt:', token);

    const Result = await userService.checkWxUserLogin(token);
    console.log('解码后的jwt长什么样？:', Result);

    //登录失败
    if(!Result.login){
        res.json(Result); 
    }

    //解码后的uid
    const openid = Result.data.openid;
    console.log('解码后的openid:', openid);

    const data = {openid};
    console.log(data);

    try {
        const result = await userLibrary.getUserInfoByJwt(data);
        
        console.log(result);
        res.json(result);
    } catch (error) {
        console.error('Error processing hot sales request:', error);
        res.status(500).json({ success: false, msg: "服务器内部错误" });
    }
});

//根据id查询商品信息  以及  添加用户浏览记录
router.post('/getCommunityInfoById', async (req, res) => {

    console.log(req.body);

    const token = req.header('Authorization');

    //用户openid jwt
    console.log('用户jwt:', token);

    const Result = await userService.checkWxUserLogin(token);
    console.log('解码后的jwt长什么样？:', Result);

    //登录失败
    if(!Result.login){
        res.json(Result); 
    }

    //解码后的uid
    const openid = Result.data.openid;
    console.log('解码后的openid:', openid);

    const goodsId = req.body;

    const data = {goodsId, openid};
    console.log(data);

    try {
        const result = await userLibrary.getCommunityInfo(data);
        console.log(result);

        if(result.success === 1){
            let Result = await userLibrary.addBrowserLibrary(data);
            console.log(Result);
        }
        
        res.json(result);
    } catch (error) {
        console.error('Error processing hot sales request:', error);
        res.status(500).json({ success: false, msg: "服务器内部错误" });
    }
});

//根据openid获得用户浏览商品记录
router.get('/getUserBrowserHistoryByOpenId', async (req, res) => {

    const token = req.header('Authorization');

    console.log(req.query);
    const goodsId = req.query;

    //用户openid jwt
    console.log('用户jwt:', token);

    const Result = await userService.checkWxUserLogin(token);
    console.log('解码后的jwt长什么样？:', Result);

    //登录失败
    if(!Result.login){
        res.json(Result); 
    }

    //解码后的uid
    const openid = Result.data.openid;
    console.log('解码后的openid:', openid);

    try {
        let result = await userLibrary.getUserBrowserHistoryByOpenId(goodsId);
        console.log(result);
        
        res.json(result);
    } catch (error) {
        console.error('Error processing hot sales request:', error);
        res.status(500).json({ success: false, msg: "服务器内部错误" });
    }
});

//-----------------------------------------------------------------
//heguang


 //社区信息接口
 router.get('/api/listDate', (req, res) => {
    const sql = ' SELECT * FROM listDate';
    db.query(sql, (err, results, fields) => {
      if (err) {
        res.status(500).json({ error: err.message });
        return;
      }
      res.json({
        message: 'success',
        data: results
      });
    });
  });

  //商城图片接口
  router.get('/api/goodspicture', (req, res) => {
    const sql = ' SELECT goods_picture FROM picture';
    db.query(sql, (err, results, fields) => {
      if (err) {
        res.status(500).json({ error: err.message });
        return;
      }
      res.json({
        message: 'success',
        data: results
      });
    });
  });
  //社区宣传图片接口
  router.get('/api/communitypicture', (req, res) => {
    const sql = ' SELECT community_picture FROM picture';
    db.query(sql, (err, results, fields) => {
      if (err) {
        res.status(500).json({ error: err.message });
        return;
      }
      res.json({
        message: 'success',
        data: results
      });
    });
  });
  const categories = [
    { id: 1, name: '文创产品' },
    { id: 2, name: '饮料' },
    { id: 3, name: '特色美食' },
    { id: 4, name: '其他' }
  ];


   // 定义GET /api/products路由，按类别获取商品信息
  router.get('/api/products', (req, res) => {
  //  const categoryId = req.query.categoryId;  
   let type = req.query.type;  
   type = categories[type-1].name;
   const sql = `SELECT * FROM goods WHERE type = ?`;
    //const sql = 'SELECT id, product_name, image_url, price FROM goodsdate';
  
    db.query(sql, [type], (err, results, fields) => {
      if (err) {
        res.status(500).json({ error: err.message });
        return;
      }
      res.json({
        message: 'success',
        data: results
      });
    });
  });


  // 定义GET /api/product路由，获取所有商品详情信息
  router.get('/api/product', (req, res) => {
    //  const categoryId = req.query.categoryId;  
     let id = req.query.id;  
     const sql = `SELECT * FROM goods WHERE id = ?`;
      //const sql = 'SELECT id, product_name, image_url, price FROM goodsdate';
    
      db.query(sql, [id], (err, results, fields) => {
        if (err) {
          res.status(500).json({ error: err.message });
          return;
        }
        res.json({
          message: 'success',
          data: results
        });
      });
    });


    //商品列表接口
    router.get('/api/goods', (req, res) => {
       //const sql = `SELECT * FROM goods WHERE id = ?`;
        const sql = 'SELECT id, name, image, price FROM goods ';
      
        db.query(sql,  (err, results, fields) => {
          if (err) {
            res.status(500).json({ error: err.message });
            return;
          }
          res.json({
            message: 'success',
            data: results
          });
        });
      });


    // 定义GET /api/activity.list路由，获取所有活动列表
  router.get('/api/activity.list', (req, res) => {  
      const sql = 'SELECT * FROM activity LIMIT 7';
      db.query(sql,(err, results, fields) => {
          if (err) {
            res.status(500).json({ error: err.message });
            return;
          }
          res.json({
            message: 'success',
            data: results
          });
        });
      });


      //定义GET /api/activity路由，获取所有活动详情信息 FORMAT(your_date_column, 'yyyy-MM-dd')
  router.get('/api/activity', (req, res) => {  
     let id = req.query.id;  
    const sql = `SELECT activity_name, host_department, task1_description, task2_description, people, location, YEAR(start_time) as year, MONTH(start_time) as month, DAY(start_time) as day, image FROM activity WHERE activity_id = ?`;
    db.query(sql, [id], (err, results, fields) => {
       if (err) {
         res.status(500).json({ error: err.message });
         return;
       }
       res.json({
         message: 'success',
         data: results
        });
     });
    });




// // //--------------------------------------------------------------------------------------------
// // //web端接口

// // //智慧社区注册
// // router.post('/web/register', async(req, res) => {
// //     try {
// //         console.log('前端数据', req.body);

// //         //包含账号密码邮箱
// //         const adminUserInfo = req.body;

// //         const result = await userService.createNewUser(adminUserInfo);

// //         //测试
// //         console.log((result));

// //         if(!result.success){
// //             throw new Error('注册失败！');
// //         }

// //         res.status(200).json({
// //             success: true,
// //             message: result.msg,
// //         });

// //     } catch (error) {
// //          res.status(500).json({
// //          success: false,
// //          message: '新用户注册失败！'
// //     });
// //     }
// // });


// // //智慧社区登录
// // //登录后返回用户id
// // router.post('/web/login', async(req, res) => {
// //     try {
// //         console.log('前端数据', req.body);

// //         const adminLoginInfo = req.body;

// //         const result = await userService.userLogin(adminLoginInfo);

// //         if(!result.success){
// //         return res.status(401).json({
// //             success: false,
// //             message: result.msg
// //         })
// //         }

// //         //   //将id编码
// //         //   const JwtuserId = await encodedInput(result.userId);

// //         //result包含这条用户的id
// //         res.status(200).json({
// //             success: true,
// //             message: result.msg,
// //             id: result.id 
// //             // userId: JwtuserId
// //         });

// //     } catch (error) {
// //         console.error('登录处理中遇到错误:', error);
// //         res.status(500).json({
// //             success: false,
// //             message: result.msg
// //        });
// //     }
// // });


// //根据id修改用户信息
// //管理员修改个人信息页面
// router.post('/web/userinfo', async(req, res) => {
//     try {
//         console.log('前端数据为', req.body);

//         const admin_userinfo = req.body;

//         // let checkJwtResult = verifyJwtToken(admin_userinfo.id);

//         // if(!checkJwtResult.login){
//         //     throw new Error('用户id有误，无法识别此用户');
//         // }

//         const result = await userService.updateUserInfo(admin_userinfo);
//         //测试
//         console.log('返回的数据', result);

//         if (!result.success) {
//             throw new Error('个人信息有误！');
//         }

//         res.status(200).json({
//             success: true,
//             message: '成功修改管理员用户信息',
//         });

//     } catch (error) {
//         // 处理错误
//         res.status(500).json({
//             success: false,
//             message: '修改个人信息失败'
//         });
//     }
// });


// //管理员新建活动
// router.post('/web/createNewActivity', async(req, res) => {
//     try {
//         console.log('前端传过来的数据', req.body);

//         const new_activity = req.body;

//         // let userId = new_activity.id;

//         // let checkJwtResult = verifyJwtToken(userId);

//         // if(!checkJwtResult.login){
//         //     throw new Error('用户id有误，无法识别此用户');
//         // }

//         const result = await userService.createNewActivity(new_activity);

//         if (!result.success) {
//             throw new Error('活动数据有问题！');
//         }

//         res.status(200).json({
//             success: true,
//             message: result.msg
//         });

//     } catch (error) {
//         // 处理错误
//         res.status(500).json({
//             success: false,
//             message: '错误错误！'
//         });
//     }
// });

// //活动列表页面查看所有活动
// router.get('/web/getAllActivities', async(req, res) => {
// try {
//     console.log('前端传过来的数据', req.query);

//     // const userId = req.query.id;

//     // let checkJwtResult = verifyJwtToken(userI9d);

//     // if(!checkJwtResult.login){
//     //     throw new Error('用户id有误，无法识别此用户');
//     // }

//     const result = await userService.getAllActivities();

//     if (!result.success) {
//         throw new Error('查看所有活动失败！！！');
//     }

//     res.status(200).json({
//         success: true,
//         message: '查看所有活动成功！',
//         data: result.data
//     });

// } catch (error) {
//     res.status(500).json({
//         success: false,
//         message: '查看所有活动失败！'
//     });
// }
// });


// //活动列表---查看某活动详情
// router.get('/web/activityDetails', async(req, res) => {
//     try {
//         // console.log('前端传过来的数据', req.query);
//         // //管理员id
//         // const userId = req.query.id;   

//         // let checkJwtResult = verifyJwtToken(userId);
    
//         // if(!checkJwtResult.login){
//         //     throw new Error('用户id有误，无法识别此用户');
//         // }

//         const activityName = req.query.activityName;

//         const result = await userService.activityDetails(activityName);
    
//         if (!result.success) {
//             throw new Error('此活动不存在！');
//         }
    
//         res.status(200).json({
//             success: true,
//             message: result.msg,
//             data: result.data
//         });
    
//     } catch (error) {
//         res.status(500).json({
//             success: false,
//             message: '查看此活动失败！'
//         });
//     }
// });

// // router.post('/web/activityDetails', async(req, res) => {
// //     try{
// //         let id = req.body.id;

// //     }catch{
// //         res.status(500).json({
// //             success: false,
// //             message: '查看活动失败！'
// //         });
// //     }
// // });


// //购物商城新增商品
// router.post('/web/addGoods', async(req, res) => {
// try {
//     // //管理员id
//     // const userId = req.body.id;   

//     // let checkJwtResult = verifyJwtToken(userId);

//     // if(!checkJwtResult.login){
//     //  throw new Error('用户id有误，无法识别此用户');
//     // }
//     console.log('前端传过来的数据', req.body);

//     const newGoods = req.body;

//     const result = await userService.addGoods(newGoods);
   
//     if (!result.success) {
//         throw new Error('商品信息不完整！');
//     }

//     res.status(200).json({
//         success: true,
//         message: result.msg,
//     });

// } catch (error) {
//     res.status(500).json({
//         success: false,
//         message: '添加商品失败！'
//     });
// }
// });





module.exports = router;
